Subject: Correct version 0.12 DLSW (5 of 8)

From: "Alan K. Bartky, Manager of Technology" <[email-masked]>
Date: Fri, 19 Aug 94 18:05:36 PDT

----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Content-Lines: 1
X-Sun-Content-Length: 33

Here is the correct part 5 of 8

----------
X-Sun-Data-Type: default
X-Sun-Data-Description: default
X-Sun-Data-Name: dlsw5.txt
X-Sun-Content-Lines: 568
X-Sun-Content-Length: 24600


RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

6.7.2.9. Example Flows from the Above Implementation

   -----SENDER-----                     ----RECEIVER----
   Granted   Window                     Window   Granted
     0         2   circuit established    2         0
     2         2   <-------- FCIND(Rpt)   2         2
     1         2   FCACK-------------->   2         1
     4         3   <-------- FCIND(Inc)   3         4
     3         3   FCACK-------------->   3         3
                          +- FCIND(Rpt)   3         6
     2         3   DATA---|----------->   3         5
     1         3   DATA---|----------->   3         4
     4         3   <------+
     3         3   FCACK-------------->   3         3
     6         3   <-------- FCIND(Rpt)   3         6
     5         3   FCACK-------------->   3         5
     4         3   DATA--------------->   3         4
     3         3   DATA--------------->   3         3
                          +- FCIND(Rpt)   3         6
     2         3   DATA---|----------->   3         5
     1         3   DATA---|----------->   3         4
     0         3   DATA---|----------->   3         3
     3         3   <------+
     2         3   FCACK-------------->   3         2
     6         4   <-------- FCIND(Inc)   4         6
     5         4   FCACK-------------->   4         5
     4         4   DATA--------------->   4         4
                                        Waiting on Buffer
                          +- FCIND(Dec)   3         7
     3         4   DATA---|----------->   3         6
     2         4   DATA---|----------->   3         5
     1         4   DATA---|----------->   3         4
     0         4   DATA---|----------->   3         3
     3         3   <------+
     2         3   FCACK-------------->   3         2
                                        Waiting on Buffer
                          +- FCIND(Dec)   2         4
     1         3   DATA---|----------->   2         3
     0         3   DATA---|----------->   2         2
     2         2   <------+
     1         2   FCACK-------------->   2         1
     4         3   <-------- FCIND(Inc)   3         4
     3         3   FCACK-------------->   3         3
     6         3   <-------- FCIND(Rpt)   3         6
     5         3   FCACK-------------->   3         5
     4         3   DATA--------------->   3         4
     3         3   DATA--------------->   3         3
     6         3   <-------- FCIND(Rpt)   3         6

6.8. Other Considerations

6.8.1. Protocol Violations

   The following events is considered protocol violations:

   1.  Sender exceeds granted units or does not acknowledge FCIND on first  frame
   after its receipt (the receiver can not discern the difference between the two).

AIW DLSw Related Interest Group                                  [Page 39]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   2.  Receiver does not follow a Reset Window Operator with an Increment Window
   Operator.

   3.  Receiver has two unacknowledged FCINDs ( other than Reset Window)
   outstanding.

   4.  Receiver sends Decrement Window Operator with a window size of one.

   Actions taken in response to protocol violations are left to the implementation
   of the node which discovers the violation.  If an implementation chooses to take
   down the circuit on which the violation occurred, HALT_DL is the appropriate
   action.

AIW DLSw Related Interest Group                                  [Page 40]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

7. DLSw State Machine

   The following state tables describe the states for a single connection through
   the Data Link Switch.  State information is kept for each connection.  The
   initial state for a connection is DISCONNECT.  The steady state is either
   CIRCUIT_ESTABLISHED or CONNECTED.  In the former state, an end-to-end circuit
   has been established allowing the support of Type 1 LLC between the end systems.
   The latter state exists when an end-to-end connection has been established for
   the support of Type 2 LLC services between the end systems.

   For SNA, circuit establishment is via the use of IEEE 802.2 Test or XID  frames.
   SNA devices send these frames to the null SAP in order to determine the source
   route information in support of bridging.  Normally SNA devices use SAP 0x04,
   0x08, or 0x0C  (most SNA LLC2 devices that have a single PU per MAC address use
   a default of 0x04).  Typically the SAP would be used to determine if the Test
   frames should be sent to the DLSw code in the router.  If both bridging and DLSw
   are enabled, this allows the product to ensure that SNA frames are not both
   bridged and switched.  Note that although typically SNA uses a DSAP and SSAP of
   0x04, it allows for other SAPs to be configured and supports unequal SAPs.  This
   allows multiple PUs to share connections between two given MAC addresses (each
   PU to PU session uses one LLC2 connection).

   For NetBIOS, circuit establishment is via the Name Query and Name Recognized
   frames.  These frames are used for both address resolution and source route
   determination.  NetBIOS devices use SAP 0xF0.

7.1. Data Link Switch States

   The Switch-to-Switch Protocols will be formally defined through a single state
   machine.  The following table lists the eleven possible states.  A separate
   state machine is employed for each end-to-end circuit that is maintained by the
   Data Link Switch.

AIW DLSw Related Interest Group                                  [Page 41]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

     State Name            Description
     ----------            -----------
     CIRCUIT_ESTABLISHED   The end-to-end circuit has been
                           established.  At this time LLC Type 1
                           services are available from end-to-end.
     CIRCUIT_PENDING       The target DLSw is awaiting a REACH_ACK
                           response to an ICANREACH message.
     CIRCUIT_RESTART       The DLSw that originated the reset is
                           awaiting the restart of the data link
                           and the DL_RESTARTED response to a
                           RESTART_DL message.
     CIRCUIT_START         The origin DLSw is awaiting a ICANREACH_cs in
                           response to a CANUREACH_cs message.
     CONNECTED             The end-to-end connection has been
                           established thereby allowing LLC Type 2
                           services from end-to-end in addition to
                           LLC Type 1 services.
     CONNECT_PENDING       The origin DLSw is awaiting the CONTACTED
                           response to a CONTACT message.
     CONTACT_PENDING       The target DLSw is awaiting the
                           DLC_CONTACTED confirmation to a DLC_CONTACT
                           signal (i.e., DLC is waiting for a UA
                           response to an SABME command).
     DISCONNECTED          The initial state with no circuit or
                           connection established, the DLSw is awaiting
                           either a CANUREACH, an ICANREACH, a
                           NETBIOS_NQ, or a NETBIOS_NR message.
     DISCONNECT_PENDING    The DLSw that originated the disconnect
                           is awaiting the DL_HALTED response to a
                           HALT_DL message.
     HALT_PENDING          The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), due to receiving a HALT_DL
                           message.
     HALT_PENDING_NOACK    The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), due to receiving a
                           HALT_DL_NOACK message.
     RESTART_PENDING       The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), and the restart of the data
                           link.
     RESOLVE_PENDING       The target DLSw is awaiting either the
                           DLC_DL_STARTED indication following the
                           DLC_START_DL request (i.e., DLC is waiting
                           for a Test response as a result of sending a
                           Test command), or a NB_Name_Recognized
                           frame in response to a NB_Name_Query frame.

                   Table 2.  Data Link Switch States

   The DISCONNECT state is the initial state for a new circuit.  One end station
   starts the connection via a TEST or XID command (i.e., DLC_RESOLVE_C) or a

AIW DLSw Related Interest Group                                  [Page 42]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   NetBIOS Name Query command (not explicitly shown).  Upon receipt, the Data Link
   Switches exchange a set of CANUREACH_ex, CANUREACH_cs, ICANREACH and REACH_ACK
   messages.  Upon completion of this four-legged exchange (note this was a "three-
   legged exchange" in RFC 1434), both Data Link Switches will be in the
   CIRCUIT_ESTABLISHED state.  Two pending states also exist during this exchange.
   The RESOLVE_PENDING state is entered by the target Data Link Switch awaiting a
   Test response to a Test Command and the CIRCUIT_PENDING state is entered by the
   target DLSw awaiting the REACH_ACK reply to an ICANREACH message.

   The CIRCUIT_ESTABLISHED state allows for the exchange of LLC Type 1 frames such
   as the XID exchanges between SNA stations that occurs prior to the establishment
   of a connection.  Also, datagram traffic (i.e., UI frames)  may be sent and
   received between the end stations. These exchanges use the XIDFRAME and
   DGRMFRAME messages sent between the Data Link Switches.

   In the CIRCUIT_ESTABLISHED state, the receipt of a SABME command (i.e.,
   DLC_CONTACTED) causes the origin DLSw to issue a CONTACT message, to send an RNR
   supervisory frame (i.e., DLC_ENTER_BUSY) to the origin station, and to enter the
   CONNECT_PENDING state awaiting a CONTACTED message.  The target DLSw, upon the
   receipt of a CONTACT message, will issue a SABME command (i.e., DLC_CONTACT) and
   enter the Contact Pending state.  Once the UA response is received (i.e.,
   DLC_CONTACTED), the target DLSw sends a CONTACTED message and enters the
   CONNECTED state.  When received, the origin DLSw enters the Connected state and
   sends an RR supervisory frame (i.e., DLC_EXIT_BUSY).

   The CONNECTED state is the steady state for normal data flow once a connection
   has been established.  Information frames (i.e., INFOFRAME messages) are simply
   sent back and forth between the end points of the connection.  This is the path
   that should be optimized for performance.

   The connection is terminated upon the receipt of a DISC frame or under some
   other error condition detected by DLC (i.e., DLC_ERROR). Upon receipt of this
   indication, the DLSw will halt the local data link, send a HALT_DL message to
   the remote DLSw, and enter the DISCONNECT_PENDING State.  When the HALT_DL frame
   is received by the other DLSw, the local DLC is halted for this data link, a
   DL_HALTED message is returned, and the DISCONNECTED state is entered.  Receipt
   of this DL_HALTED message causes the other DLSw to also enter the DISCONNECTED
   state.

   The CIRCUIT_RESTART state is entered if one of the Data Link Switches receives a
   SABME command  (i.e., DLC_RESET) while in the CONNECTED state.  This causes a DM
   command to be returned to the origin station and a RESTART_DL message to be sent
   to the remote Data Link Switch. This causes the remote data link to be halted
   and then restarted.  The remote DLSw will then send a DL_RESTARTED message back
   to the first DLSw.  The receipt of the DL_RESTARTED message causes the first
   DLSw to issue a new CONTACT message, assuming that the local DLC has been
   contacted (i.e., the origin station has resent the SABME command).  This is
   eventually responded to by a CONTACTED message.  Following this exchange, both
   Data Link Switches will return to the CONNECTED state.  If the local DLC has not
   been contacted, the receipt of a DL_RESTARTED command causes the Data Link
   Switch to enter the CIRCUIT_ESTABLISHED state awaiting the receipt of a SABME
   command (i.e., DLC_CONTACTED signal).

   The HALT_PENDING and RESTART_DL states have only one input event and only one
   output action.  While in these states, the Data Link Switch is awaiting
   responses from the local station on the adjacent LAN (i.e., a UA response to a
   DISC command). Also in the RESTART_PENDING state, the Data Link Switch will

AIW DLSw Related Interest Group                                  [Page 43]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   attempt to restart the data link prior to sending a DL_RESTARTED message.  For
   some implementations, the start of a data link involves the exchange of a Test
   command/response on the adjacent LAN (i.e., DLC_START_DL).  For other
   implementations, this additional exchange may not be required.

7.2. State Transition Tables

   This section provides a detailed representation of the Data Link Switch, as
   document by a set of state machines.  The first state machine documents the
   sending and receiving of SSP messages.  Many of the transitions are dependent
   upon local signals between the Data Link Switch entity and one of the DLC
   entities.  These signals and their definitions are given in the following
   tables.

AIW DLSw Related Interest Group                                  [Page 44]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

     Event Name      Description
     ----------      -----------
     DLC_CONTACTED   Contact Indication:  DLC has received an SABME
                     command or DLC has received a UA response as a
                     result of sending an SABME command.
     DLC_DGRM        Datagram Indication:  DLC has received a UI frame.
     DLC_ERROR       Error condition indicated by DLC:  Such a
                     condition occurs when a DISC command is received
                     or when DLC experiences an unrecoverable error.
     DLC_INFO        Information Indication:  DLC has received an
                     Information (I) frame.
     DLC_DL_HALTED   Data Link Halted Indication:  DLC has
                     received a UA response to a DISC command.
     DLC_DL_STARTED  Data Link Started Indication:  DLC has
                     received a Test response from the null SAP.
     DLC_RESET       Reset Indication:  DLC has received an SABME
                     command during the time a connection is
                     currently active and has responded with DM.
     DLC_RESOLVE_C   Resolve Command Indication:  DLC has received
                     a Test command addressed to the null SAP, or an
                     XID command addressed to the null SAP.
     DLC_XID         XID Indication:  DLC has received an XID command
                     or response to a non-null SAP.

   Other Events:

        Event Name      Description
        ----------      -----------
        XPORT_FAILURE   Failure of the transport connection used by the
                        circuit.
        CS_TIMER_EXP    The CIRCUIT_START timer (started when the circuit
                        went into CIRCUIT_START state) has expired.

                       Table 3.  Local DLC Events

     Action Name     Description
     -----------     -----------
     DLC_CONTACT     Contact Station Request:  DLC will send a SABME
                     command or a UA response to an outstanding SABME
                     command.
     DLC_DGRM        Datagram Request:  DLC will send a UI frame.
     DLC_ENTER_BUSY  Enter Link Station Busy:  DLC will send an
                     RNR supervisory frame.
     DLC_EXIT_BUSY   Exit Link Station Busy:  DLC will send an RR
                     supervisory frame.
     DLC_HALT_DL     Halt Data Link Request:  DLC will send a DISC
                     command.
     DLC_INFO        Information Request:  DLC will send an I frame.
     DLC_RESOLVE_R   Resolve Response Request:  DLC will send a
                     Test response or XID response from the null SAP.
     DLC_START_DL    Start Data Link Request:  DLC will send a Test
                     command to the null SAP.
     DLC_XID         XID Request:  DLC will send an XID command or an
                     XID response.

AIW DLSw Related Interest Group                                  [Page 45]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   Other Actions:

     Action Name     Description
     ----------      -----------
     START_CS_TIMER  Start the CIRCUIT_START timer.

                         Table 4.  Local DLC Actions

   The Data Link Switch may be described by a state transition table as documented
   in the following sections.  Each of the states is described below in terms of
   the events, actions, and next state for each transition. If a particular event
   is not listed for a given state, no action and no state transition should occur
   for that event.  Any significant comments concerning the transitions within a
   given state are given immediately following the table representing the state.

   A separate state machine is maintained by the Data Link Switch for each end-to-
   end circuit.  The number of circuits that may be supported by each Data Link
   Switch is a local implementation option.

   The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are SSP
   messages that are not associated with a particular circuit.  The processing of
   these messages is covered by the following table:

      +-----------------------+-------------------------------------------+
      |        Event          |                  Action(s)                |
      +-----------------------+-------------------------------------------+
      | Receive CANUREACH_ex  | Respond with ICANREACH_ex if it is known  |
      |                       | that the destination MAC address can be   |
      |                       | reached.  This can be determined using    |
      |                       | cached information or using a             |
      |                       | TEST command/TEST response exchange.      |
      +-----------------------+-------------------------------------------+
      | Receive NETBIOS_NQ_ex | Respond with NETBIOS_NR_ex if it is known |
      |                       | that the destination NETBIOS name can be  |
      |                       | reached, else send a NETBIOS NAME_QUERY   |
      |                       | using the name contained in the SSP       |
      |                       | message.  If a corresponding NETBIOS      |
      |                       | NAME_RECOGNIZED is received, send it back |
      |                       | in a NETBIOS_NR_ex to the originator of   |
      |                       | the NETBIOS_NQ_ex.                        |
      +-----------------------+-------------------------------------------+

AIW DLSw Related Interest Group                                  [Page 46]
RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

7.2.1. DISCONNECTED State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CANUREACH_cs | DLC_START_DL        | RESOLVE_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive ICANREACH_cs | Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
      |                      | DLC_RESOLVE_R       |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive NETBIOS_NQ_cs| DLC_DGRM            | RESOLVE_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive NETBIOS_NR_cs| Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
      |                      | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_RESOLVE_C        | Send CANUREACH_ex   |                      |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | If source route     | If CANUREACH_cs was  |
      |                      | bridged frame with  | sent:                |
      |                      | broadcast indicated:|   CIRCUIT_START      |
      |                      |   Send CANUREACH_ex |                      |
      |                      | else:               |                      |
      |                      |   Send CANUREACH_cs |                      |
      |                      |   START_CS_TIMER    |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | If NETBIOS          |                      |
      |                      | NAME_QUERY:         |                      |
      |                      |  Send NETBIOS_NQ_ex |                      |
      |                      | else:               |                      |
      |                      |  Send DATAFRAME     |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | Send CANUREACH_cs   | CIRCUIT_START        |
      +----------------------+---------------------+----------------------+

   It is assumed that each Data Link Switch will build a set of topology tables
   giving the identity of each Data Link Switch that can reach a specific MAC
   address or a specific NetBIOS name.  This table can be built based upon the
   origin address information received within the CANUREACH message or NETBIOS_NQ
   message and the target address information within the ICANREACH message or
   NETBIOS_NR message.  As a consequence, the amount of search traffic can be kept
   to a minimum.

   Upon receipt of a Test command or XID command to the null SAP (i.e.,
   DLC_RESOLVE_C signal from DLC), the Data Link Switch will check the topology
   table prior to sending the CANUREACH message.  If the target MAC address is in
   the table, the CANUREACH message will be sent to only those Data Link Switches
   that are known to be able to reach the given MAC address.  If the MAC address is
   not in the table, the CANUREACH message will be sent to all known Data Link
   Switches.  Since the destination link SAP (DSAP) value is null, the Target Link
   SAP field in the CANUREACH message header is set equal to the Origin Link SAP
   value.

   Upon receipt of a NB_Name_Query the Data Link Switch will check the topology
   table prior to sending the NETBIOS_NQ message.  If the target NetBIOS name is in
   the table, the NETBIOS_NQ message will be sent to only those Data Link Switches

AIW DLSw Related Interest Group                                  [Page 47]